home *** CD-ROM | disk | FTP | other *** search
- PAGE 56,132
- TITLE MIDIO PERFORM DIRECT DOS CALLS FOR C86 C MAIN PROGRAMS
- ; (c) Copyright 1984 by The Computer Entomologist
- ;
- ; Permission is hearby granted to use or distribute this software
- ;without any restrictions. You may make copies for yourself or your
- ;friends. You may include it in any hardware or software product that you
- ;sell for profit.
- ;
- ; This software is distributed as is, and is not guaranteed to work
- ;on any particular hardware/software configuration. Furthermore, no
- ;liability is granted with this software: the user takes responcibility for
- ;any damage this software may do to his system.
- ;
- ; Nasy notices aside, if you have any questions about this software, you
- ;can reach me at the address below. If you impliment any new features or
- ;find (and fix!) any bugs, I would be happy to hear from you.
- ;
- ; Mike Higgins
- ; The Computer Entomologist
- ; P.O. Box 197
- ; Duncans Mills, CA 95430
-
-
- INCLUDE CODE
-
- PUBLIC _MOPEN
- _MOPEN PROC NEAR ;INT=MOPEN(NAME);
- NAME=4
-
- PUSH BP ;DO THE NORMAL C LINKAGE
- MOV BP,SP
-
- MOV DX,NAME[BP] ;GET NAME OF DEVICE TO OPEN
- MOV AX,03D02H ;OPEN IT FOR READ/WRITE.
- INT 021H ;WELL, CAN DOS DO IT?
- JC OPENERR ;CHECK FOR ERROR
- MOV BX,AX ;SET UP TO DO AN IOCTL CALL
- MOV AX,04400H ;GET DEVICE INFO
- INT 021H
- OR DL,020H ;SET THE "RAW" BIT, AND
- MOV DH,0 ;CLEAR UPPER BITS
- MOV AX,04401H ;WRITE IT BACK OUT
- INT 021H
-
- MOV AX,BX ;RETURN THE HANDLE
- OPENDONE:
- POP BP ;RECOVER BP
- RET ;RETURN TO C
- OPENERR:
- OR AH,080H ;MAKE AX NEGATIVE
- JMP OPENDONE
-
- _MOPEN ENDP
-
- PUBLIC _MCLOSE
- _MCLOSE PROC NEAR ;MCLOSE(HANDLE);
- HAND=4
- PUSH BP
- MOV BP,SP
-
- MOV BX,HAND[BP] ;GET FILE HANDLE
- MOV AH,03EH
- INT 021H ;CLOSE FILE
-
- POP BP
- RET
-
- _MCLOSE ENDP
-
- PUBLIC _MREAD
- _MREAD PROC NEAR ;SIZE=MREAD(BUF,SIZE,HAND);
- BUF=4
- SIZE=6
- HAND=8
- PUSH BP
- MOV BP,SP
-
- MOV DX,BUF[BP] ;GET BUFFER ADDRESS
- MOV CX,SIZE[BP] ;AND LENGTH
- MOV BX,HAND[BP] ;GET FILE HANDLE
- MOV AH,03FH ;SET UP TO DO A READ
- INT 021H
- JNC RDONE ;CHECK FOR ERROR
- OR AH,080H ;MAKE NEGATIVE FOR ERROR
- RDONE:
- POP BP
- RET
-
- _MREAD ENDP
-
- PUBLIC _MWRITE
- _MWRITE PROC NEAR ;SIZE=MWRITE(BUF,SIZE,HAND);
-
- PUSH BP
- MOV BP,SP
-
- MOV DX,BUF[BP] ;GET BUFFER ADDRESS
- MOV CX,SIZE[BP] ;AND LENGTH
- MOV BX,HAND[BP] ;GET FILE HANDLE
- MOV AH,040H ;SET UP TO DO A WRITE
- INT 021H
-
- POP BP
- RET
-
- _MWRITE ENDP
-
- PUBLIC _MIOCTLR ;DO I/O CONTROL READ
- _MIOCTLR PROC NEAR ;ERR=MIOCTLR(BUF,LEN,HAND);
-
- PUSH BP ;DO THE NORMAL C LINKAGE
- MOV BP,SP
-
- MOV BX,HAND[BP] ;STORE HANDLE IN BX
- MOV DX,BUF[BP] ;GET BUFFER ADDRESS
- MOV CX,SIZE[BP] ;AND LENGTH.
- MOV AX,04402H ;TELL DOS THIS IS IOCTL CALL READ
- INT 021H ;WAKE UP DOS.
- JNC IORDONE ;CHECK FOR ERROR
- OR AH,080H ;RETURN ERROR NEGATIVE
- IORDONE:
- POP BP ;RECOVER BP
- RET ;RETURN TO C
-
- _MIOCTLR ENDP
-
- PUBLIC _MIOCTLW ;DO I/O CONTROL WRITE
- _MIOCTLW PROC NEAR ;ERR=MIOCTLW(BUF,LEN,HAND);
-
- PUSH BP ;DO THE NORMAL C LINKAGE
- MOV BP,SP
-
- MOV BX,HAND[BP] ;STORE HANDLE IN BX
- MOV DX,BUF[BP] ;GET BUFFER ADDRESS
- MOV CX,SIZE[BP] ;AND LENGTH.
- MOV AX,04403H ;TELL DOS THIS IS IOCTL CALL WRITE
- INT 021H ;WAKE UP DOS.
- JNC IOWDONE ;CHECK FOR ERROR
- OR AH,080H ;RETURN ERROR NEGATIVE
- IOWDONE:
- POP BP ;RECOVER BP
- RET ;RETURN TO C
-
- _MIOCTLW ENDP
-
- INCLUDE ENDCODE
-
- END
-